package com.itany.corejava.code11_io.字节流;

import java.io.*;

/**
 * @author 石小俊
 * @date 2023年05月11日 14:56
 */
public class Test04_字节数组输入输出流 {

    public static void main(String[] args) {
//        test01();
        test02();
    }

    public static void test01() {
        byte[] data = "Hello World".getBytes();

        try {
            // 定义字节数组输入流,数据来源为字节数组
            // 字节数组流不需要关闭
            InputStream in = new ByteArrayInputStream(data);

            byte[] b = new byte[1024];
            int i = -1;
            while ((i = in.read(b)) != -1) {
                // System.out.println((char)i);
                System.out.println(new String(b, 0, i));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void test02() {
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();

            // 将数据写入到内置的字节数组中
            // 将数据写入到缓存区中
            out.write("Hello World".getBytes());
            // 将输入写入到目的地
            out.flush();

            // 获取内置的字节数组的数据
            // 在内存中创建一个新的字节数组空间,并且缓冲区的有效内容已复制到该数组中
            byte[] data = out.toByteArray();
            // 从内存中取数据
            System.out.println(new String(data));
            // 从缓存区取数据
            // 使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。
            System.out.println(out.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
